import request from '@/api/axios'
import {AxiosPromise} from 'axios'
import {DataRes} from '@/api/config'

export interface ResultReviewParams {
  instrumentId?: string | null // 仪器id
  sendTime?: string // 送检日期
  startSendTime?: string // 送检开始时间，检验结果审核页面使用
  endSendTime?: string // 送检结束时间，检验结果审核页面使用
  checkupNo?: string // 体检号
  personName?: string // 姓名
  instrumentSampleStatus: number //标本检验状态 检验结果审核页面使用，只能传2
}

// 左侧审核列表

export interface ResultReviewList {
  id: string
  checkupRegisterId: string // 体检登记id
  gender: string // 性别
  age: string // 年龄
}

// 右侧结果查询参数

export interface ResultReviewInforParams {
  id: string
  checkupRegisterId: string // 体检登记id
  gender: string // 性别
  age: string // 年龄
}

//参考区间
export interface InstrumentReferenceRangeVO {
  dangerRangeLow: number // 危急范围低值
  dangerRangeHigh: number // 危急范围高值
  normalRangeHigh: number // 正常范围上限
  normalRangeLow: number // 正常范围下限
  viewRange: string // 参考值
  dangerPositive: number // 是否勾选危急值 0 否 1 是
  resultType: string // 1 数值型 2 文字型
}

// 结果保存
export interface RegisterItemVOS {
  id: string
  result?: string | null // 结果
  precision?: string
  tips: string // 提示
  viewRange: string // 参考值
  inspectDoctorId: string | null // 检验医师id
  inspectDoctorName: string | null // 检验医生姓名
  reportTime: string | null // 报告时间
  sampleTypeName: string // 标本类型
  inspectResultType: number // 检验结果类型
  instrumentReferenceRangeVO: InstrumentReferenceRangeVO //参考区间
  instrumentReferenceRangeVOList: Array<InstrumentReferenceRangeVO>
}

// 右侧结果列表
export interface ResultReviewInforList {
  id: string
  checkupRegisterId: string // 体检登记id
  gender: string // 性别
  age: string // 年龄
  registerItemVOS: Array<RegisterItemVOS>
}

// 保存结果参数
export interface SaveResult {
  id: string // 审核id
  registerItemVOS: Array<RegisterItemVOS>
}

// 保存结果参数
export interface SaveResultParams {
  id: string // 审核id
  registerItemVOS: Array<Partial<RegisterItemVOS>>
}

/**
 * @description: 根据检验样本状态查询登记人员
 * @param {ResultReviewParams} params
 * @return {*}
 */
export const getResultReviewList = (params: ResultReviewParams): AxiosPromise<DataRes<Array<ResultReviewList>>> => {
  return request({
    url: '/api/instrumentItem/selectList',
    method: 'get',
    params
  })
}

/**
 * @description: 检验结果审核查询
 * @param {ResultReviewInforParams} params
 * @return {*}
 */
export const getResultReviewInfor = (params: ResultReviewInforParams): AxiosPromise<DataRes<SaveResult>> => {
  return request({
    url: '/api/instrumentItem/selectItemResult',
    method: 'get',
    params
  })
}

/**
 * @description: 批量审核发布
 * @param {Array} data
 * @return {*}
 */
export const auditRelease = (data: Array<string>): AxiosPromise<DataRes<null>> => {
  return request({
    url: '/api/instrumentItem/auditInstrumentItem',
    method: 'post',
    data
  })
}

/**
 * @description: 保存
 * @param {Array} data
 * @return {*}
 */
export const saveResult = (data: SaveResultParams): AxiosPromise<DataRes<null>> => {
  return request({
    url: '/api/instrumentItem/saveResult',
    method: 'post',
    data
  })
}

/**
 * @description: 获取精度结果
 * @param {*} result
 * @param {*} precision
 * @return {*}
 */
export const getPrecisionResult = (result?: string | number | null, precision?: string | null) => {
  switch (precision) {
  case '取整':
    return Math.floor(Number(result))
  case '小数点后一位':
    return Math.floor(Number(result) * 10) / 10
  case '小数点后两位':
    return Math.floor(Number(result) * 100) / 100
  case '小数点后三位':
    return Math.floor(Number(result) * 1000) / 1000
  case '小数点后四位':
    return Math.floor(Number(result) * 10000) / 10000
  case '小数点后五位':
    return Math.floor(Number(result) * 100000) / 100000
  default:
    return result
  }
}
